package com.billdowney.service.interfaces.file;

import java.io.File;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.multipart.MultipartFile;

import com.billdowney.entity.file.FileInfo;
import com.billdowney.exception.BizException;
import com.billdowney.service.interfaces.base.BaseService;

/**
 * 文件信息接口
 * 
 * @author 超级小富翁 - BillDowney
 * @data 2017年10月23日 下午5:49:29
 */
public interface FileInfoService extends BaseService<FileInfo> {

	/**
	 * 保存文件信息
	 * 
	 * @param fileInfo
	 * @return 保存的
	 * @anthor billdonwey
	 */
	public FileInfo saveFileInfo(FileInfo fileInfo);

	/**
	 * 通过id查找文件信息
	 * 
	 * @param id
	 * @return 查找到的文件信息
	 * @anthor billdonwey
	 */
	public FileInfo findFileInfoById(String id) throws BizException;

	/**
	 * 通过id更新下载文件次数
	 * 
	 * @param id
	 * @return 是否成功
	 * @anthor billdonwey
	 */
	public boolean updateFileInfoDownloadNum(String id);

	/**
	 * @Function: saveAllMultipartFile
	 * @Description: 传入MultipartFile类型的数组，来保存到本地
	 * @param files    从MultipartHttpServletRequest获取的文件Map集合
	 * @param isPublic 是否默认公用
	 * @return 报错到数据库的文件id列表
	 * @throws Exception
	 * @author: 超级小富翁 - BillDowney
	 * @date: 2018年5月22日 上午11:30:24
	 */
	public List<String> saveAllMultipartFile(Map<String, MultipartFile> files, boolean isPublic) throws Exception;

	/**
	 * @Description: 传入MultipartFile对象来保存文件
	 * @param multipartFile MultipartFile文件对象
	 * @param isPublic      是否公用
	 * @return
	 * @throws Exception
	 * @author: 唐路钧
	 * @date: 2018年9月18日 上午11:57:55
	 */
	public FileInfo saveMultipartFile(MultipartFile multipartFile, boolean isPublic) throws Exception;

	/**
	 * @Function: fileDownloadById
	 * @Description: 通过数据库的文件信息表中的id来下载对应的文件，支持断点续传
	 * @param id       文件信息表中的id
	 * @param request
	 * @param response
	 * @throws Exception
	 * @author: 超级小富翁 - BillDowney
	 * @date: 2018年8月2日 下午5:39:26
	 */
	public void fileDownloadById(String id, HttpServletRequest request, HttpServletResponse response) throws Exception;

	/**
	 * @Description: 传入文件对象来下载文件
	 * @param fileInfo 文件对象
	 * @param request
	 * @param response
	 * @throws Exception
	 * @author: 唐路钧
	 * @date: 2018年9月6日 上午10:47:05
	 */
	public void fileDownload(FileInfo fileInfo, HttpServletRequest request, HttpServletResponse response)
			throws Exception;

	/**
	 * 下载文件
	 * 
	 * @param downloadFile 下载的文件对象
	 * @param fileName     文件名称，如果为空，则取downloadFile的name
	 * @param request
	 * @param response
	 * @author: 超级小富翁 - BillDowney
	 * @date: 2019年4月29日 上午10:16:37
	 */
	public void fileDownload(File downloadFile, String fileName, HttpServletRequest request,
			HttpServletResponse response) throws Exception;

	/**
	 * @Function: delFileByIds
	 * @Description: 通过id来删除文件
	 * @param ids 文件id数组
	 * @return 成功条数
	 * @author: 超级小富翁 - BillDowney
	 * @date: 2018年8月9日 下午7:00:20
	 */
	public int delFileByIds(String[] ids) throws Exception;

	/**
	 * @Description: 通过id来修改公用状态
	 * @param ids 文件id数组
	 * @return 成功条数
	 * @author: 唐路钧
	 * @date: 2018年8月25日 下午4:43:41
	 */
	public int modifyPublicState(String[] ids) throws Exception;

	/**
	 * @Description: 通过文件id修改文件名
	 * @param id       文件id
	 * @param fileName 修改的文件名
	 * @author: 唐路钧
	 * @date: 2018年8月25日 下午5:56:28
	 */
	public FileInfo modifyFileName(String id, String fileName) throws Exception;

}
